Occasionally large smp machines fail to reboot properly and die under
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 27 Apr 2006 08:56:21 +0000 (09:56 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 27 Apr 2006 08:56:21 +0000 (09:56 +0100)
an IPI storm of smp_call_function() to machine_reboot.  Only the boot
processor needs to run machine_restart, so send an IPI to CPU0.

Original patch by: Ryan Harper <ryanh@us.ibm.com>

Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/shutdown.c

index 97b41a94caf5841fba8ad1b14f769a57311c35e4..bf9015280a8f20375a5ac99d0deed31387b2c996 100644 (file)
@@ -218,7 +218,9 @@ void machine_restart(char * __unused)
     /* Ensure we are the boot CPU. */
     if ( GET_APIC_ID(apic_read(APIC_ID)) != boot_cpu_physical_apicid )
     {
-        smp_call_function((void *)machine_restart, NULL, 1, 0);
+        /* Send IPI to the boot CPU (logical cpu 0). */
+        on_selected_cpus(cpumask_of_cpu(0), (void *)machine_restart,
+                         NULL, 1, 0);
         for ( ; ; )
             safe_halt();
     }